// 给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数 。

// 子数组是数组中元素的连续非空序列。

// 示例 1：

// 输入：nums = [1,1,1], k = 2
// 输出：2


// 方法： 前缀和，要加上前缀本身
var subarraySum = function (num, k) {
  let len = num.length;
  let mapping = new Map();
  mapping.set(0, 1);
  let sum = 0;
  let preDiff;
  let res = 0;
  for (let i = 0; i < len; i++) {
    sum += num[i];
    if (mapping.has(sum)) {
      let count = mapping.get(sum);
      count++;
      mapping.set(sum, count);
    } else {
      mapping.set(sum, 1);
    }
  }
  for (let [pre, count] of mapping) {
    preDiff = pre - k;
    if (mapping.has(preDiff)) {
      let diffCount = mapping.get(preDiff);
      res += diffCount;
    }
  }
  return res;
};

console.log(subarraySum([1, 2, 1, 2, 1], 3));
